var express = require('express');
var router = express.Router();
var cheerio = require('cheerio');
var http = require('http');
var Copy = require('../models/copy.js');

var superagent = require("superagent");
var async = require("async");
var eventproxy = require('eventproxy');
var node_url = require('url');

/* GET home page. */
// router.get('/', function(req, res, next) {
//     // var url = 'http://192.168.1.108:8868/search-results/_all?doc_type=cndata%2Cendata%2Cjpdata';
//     var urlsArray = []; //存放爬取网址
//     var pageUrls = [];  //存放收集文章页面网站
//     var pageNum = 10;  //要爬取文章的页数
//
//     var start = new Date().getTime();//起始时间
//     for(var i=1 ; i<= pageNum ; i++){
//         pageUrls.push('http://cnodejs.org/?tab=dev&page='+i);
//     }
//     pageUrls.forEach(function(pageUrl){
//         http.get(pageUrl, function(res) {
//             var html = '';
//             // res.setEncoding('utf-8'); //防止中文乱码
//             // 获取页面数据
//             res.on('data', function(data) {
//                 html += data;
//             });
//             // 数据获取结束
//             res.on('end', function() {
//
//                 // 通过过滤页面信息获取实际需求的轮播图信息
//                 var slideListData = filterChapters(html);
//                 // 打印信息
//                 for(var i=0;i<slideListData.length;i++){
//                     var newCopy = new Copy({
//                         time: slideListData[i].time,
//                         open_num: slideListData[i].open_num,
//                         text: slideListData[i].text,
//                         like:slideListData[i].like
//                     });
//                     newCopy.save(function (err) {
//                         if (err) {
//                             // res.send("注册失败")
//                         }
//                     });
//                 }
//
//
//
//
//             });
//         }).on('error', function() {
//             console.log('获取数据出错！');
//         });
//
//     });
//     var end = new Date().getTime();//接受时间
//     console.log((end - start)+"ms")
//   /* 过滤页面信息 */
//     function filterChapters(html) {
//       // console.log(html)
//         var $ = cheerio.load(html);
//         var items = [];
//         $('#topic_list').find(".cell").each(function (idx, element) {
//             var $element = $(element);
//             console.log($element.find(".topic_title").html())
//             items.push({
//                 time: $element.find(".user_avatar").html(),
//                 open_num: $element.find(".reply_count ").html(),
//                 text: $element.find(".topic_title").html(),
//                 like: $element.find(".last_active_time").html()
//             });
//         });
//         // 返回课程信息
//         return items;
//     }
//
//
//
//
//   res.render('index', { title: 'Express' });
// });

// // eventproxy方法
// router.get('/', function (req, res, next) {
//
//     // var url = 'http://192.168.1.108:8868/search-results/_all?doc_type=cndata%2Cendata%2Cjpdata';
//     var cnodeUrl = 'https://cnodejs.org/';
//
//         function getNowFormatDate() {
//         var date = new Date();
//         var seperator1 = "-";
//         var seperator2 = ":";
//         var month = date.getMonth() + 1;
//         var strDate = date.getDate();
//         if (month >= 1 && month <= 9) {
//             month = "0" + month;
//         }
//         if (strDate >= 0 && strDate <= 9) {
//             strDate = "0" + strDate;
//         }
//         var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
//             + " " + date.getHours() + seperator2 + date.getMinutes()
//             + seperator2 + date.getSeconds()+seperator2+date.getMilliseconds();
//         return currentdate;
//     }
//     getNowFormatDate()
//     // 用 superagent 去抓取 https://cnodejs.org/ 的内容
//     superagent.get(cnodeUrl)
//         .end(function (err, res) {
//             if (err) {
//                 return console.error(err);
//             }
//             var topicUrls = [];
//             var $ = cheerio.load(res.text);
//             // 获取首页所有的链接
//             $('#topic_list .topic_title').each(function (idx, element) {
//                 var $element = $(element);
//                 // $element.attr('href') 本来的样子是 /topic/542acd7d5d28233425538b04
//                 // 我们用 url.resolve 来自动推断出完整 url，变成
//                 // https://cnodejs.org/topic/542acd7d5d28233425538b04 的形式
//                 // 具体请看 http://nodejs.org/api/url.html#url_url_resolve_from_to 的示例
//                 var href = url.resolve(cnodeUrl, $element.attr('href'));
//                 topicUrls.push(href);
//             });
//
//             // 得到 topicUrls 之后
//
//             // 得到一个 eventproxy 的实例
//             var ep = new eventproxy();
//
//             // 命令 ep 重复监听 topicUrls.length 次（在这里也就是 40 次） `topic_html` 事件再行动
//             ep.after('topic_html', topicUrls.length, function (topics) {
//                 // topics 是个数组，包含了 40 次 ep.emit('topic_html', pair) 中的那 40 个 pair
//
//                 // 开始行动
//                 topics = topics.map(function (topicPair) {
//                     // 接下来都是 jquery 的用法了
//                     var topicUrl = topicPair[0];
//                     var topicHtml = topicPair[1];
//                     var $ = cheerio.load(topicHtml);
//                     return ({
//                         title: $('.topic_full_title').text().trim(),
//                         href: topicUrl,
//                         comment1: $('.reply_content').eq(0).text().trim(),
//                     });
//                 });
//
//                 console.log('final:');
//                 console.log(topics);
//             });
//
//             topicUrls.forEach(function (topicUrl) {
//                 superagent.get(topicUrl)
//                     .end(function (err, res) {
//                         console.log('fetch ' + topicUrl + ' successful'+ getNowFormatDate());
//                         ep.emit('topic_html', [topicUrl, res.text]);
//                     });
//             });
//         });
//
//     res.render('index', { title: 'Express' });
// });




//async方法
router.get('/', function (req, res, next) {




    var concurrencyCount = 0;

    var urls = [];

    var fetchUrl = function (url, callback) {
        // var delay = parseInt((Math.random() * 10000000) % 3000, 10);

        concurrencyCount++;
        console.log('现在的并发数是', concurrencyCount, '，正在抓取的是', url, '，开始时间',getNowFormatDate() );
        var topicUrls = [];
        superagent.get(url)
            .end(function(err,sres){
                // sres.text 里面存储着请求返回的 html 内容
                var $ = cheerio.load(sres.text);
                // 收集数据
                // 拼接URL
                $('.news-list li').each(function (idx, element) {
                    var $element = $(element);
                    // $element.attr('href') 本来的样子是 /topic/542acd7d5d28233425538b04
                    // 我们用 url.resolve 来自动推断出完整 url，变成
                    // https://cnodejs.org/topic/542acd7d5d28233425538b04 的形式
                    // 具体请看 http://nodejs.org/api/url.html#url_url_resolve_from_to 的示例
                    var href = node_url.resolve(url, $element.find(".news-tit").attr('href'));

                    var author=$element.find(".author-name").text()
                    var title=$element.find(".news-tit").text()
                    var aritle_head={"author":author,"title":title,"href":href}
                    topicUrls.push(aritle_head);
                });
                aritle_body()
            });
        function aritle_body() {



            var taskList = topicUrls.map(function (aritle_head) {

                return function (callback) {
                    var markdown_text='';

                    superagent.get(aritle_head.href)
                        .end(function(err,sres){
                            // sres.text 里面存储着请求返回的 html 内容
                            var $ = cheerio.load(sres.text);
                            // 收集数据
                            // 拼接URL
                            markdown_text=$(".info_guide").text()
                            markdown_text=markdown_text.substring(0,100)
                            aritle_head.text=markdown_text
                            return callback(null,aritle_head);
                        });
                }
            });
            async.parallelLimit (taskList, 15, function (error, result) {
                for(var i=0;i<result.length;i++){
                    var newCopy = new Copy({
                        author: result[i].author,
                        title: result[i].title,
                        text: result[i].text,
                    });
                    newCopy.save(function (err) {
                        if (err) {
                        // res.send("注册失败")
                        }
                    });
                }

                console.log('现在的并发数是', concurrencyCount, '，正在抓取的是', url, '，结束时间',getNowFormatDate())
                concurrencyCount--;
                return callback(null, url +' '+topicUrls.length);
            });


            // callback(null, url +' '+topicUrls.length);
        }
    };




    for(var i = 1; i <= 10; i++) {
        urls.push('http://hy.87870.com/news/list-0-0-' + i+'.html');
    }

    async.mapLimit(urls, 2, function (url, callback) {
        fetchUrl(url, callback);
    }, function (err, result) {
        console.log('final:');
        console.log(result);
    });






    //当前时间
    // var cnodeUrl = 'https://cnodejs.org/';
    function getNowFormatDate() {
        var date = new Date();
        var seperator1 = "-";
        var seperator2 = ":";
        var month = date.getMonth() + 1;
        var strDate = date.getDate();
        if (month >= 1 && month <= 9) {
            month = "0" + month;
        }
        if (strDate >= 0 && strDate <= 9) {
            strDate = "0" + strDate;
        }
        var currentdate = date.getFullYear() + seperator1 + month + seperator1 + strDate
            + " " + date.getHours() + seperator2 + date.getMinutes()
            + seperator2 + date.getSeconds()+seperator2+date.getMilliseconds();
        return currentdate;
    }
    getNowFormatDate()





    res.render('index', { title: 'Express' });
});


router.get('/huaban', function(req, res, next) {


    superagent.get('http://huaban.com/explore/mantianxing/')
        .end(function(err,sres){
            // sres.text 里面存储着请求返回的 html 内容
            var $ = cheerio.load(sres.text);
            // 收集数据
            // 拼接URL
            var html=sres.text;
            // console.log(typeof (html))
            // console.log(html.indexOf('app.page["pins"] = '))
            html=html.substring(html.indexOf('app.page["pins"] = '))
            html=html.substring(0,html.indexOf('app._csr = true'))
            html=html.replace('app.page["pins"] = ','')
            html=html.substring(0,html.length-2)
            var arr=JSON.parse(html)
            console.log(arr)
            // for(var i=0;i<arr.length;i++){
            //     console.log(arr[i].raw_text)
            // }

            // aritle_body()
        });




    res.render('huaban', { title: 'huaban' });
})
module.exports = router;
